//
//  Moteur.m
//  Metronome
//
//  Created by Thomas Dupont on 23/09/09.
//  Copyright 2009 GreenTeam. All rights reserved.
//

#import "Moteur.h"
#import "Materiel.h"
#import "MetronomeKit.h"

@implementation Moteur
@synthesize controller;
@synthesize commandFire;

#pragma mark -
#pragma mark Memory Management
- (id)init
{
	if(self = [super init]){
		tempo = kMinTempo;
		nbTempsParMesure = kDefaultNbTempsParMesure;
		etatMarche = kDefaultEtatMarche;
		tempsCourant = kDefaultTempsCourant;
	}
	return self;
}
- (void)dealloc
{
	[(id)commandFire release];
	[super dealloc];
}


#pragma mark -
#pragma mark MoteurProtocol Methods
- (NSInteger)tempo
{
	return tempo;
}

- (void)setTempo:(NSInteger)unTempo
{
	if (unTempo < kMinTempo) {
		tempo = kMinTempo;
	}
	else if (unTempo > kMaxTempo) {
		tempo = kMaxTempo;
	}
	else {
		tempo = unTempo;
	}
	if(etatMarche == YES)
	{
		[[[Materiel sharedMateriel] horloge] desactiver:commandFire];
		[[[Materiel sharedMateriel] horloge] activerCommande:commandFire periodiquement:60.0/tempo];
	}
}

- (NSInteger)nbTempsParMesure
{
	return nbTempsParMesure;
}

- (void)setNbTempsParMesure:(NSInteger)nbTemps
{
	if(nbTemps > kMaxMesure)
		nbTempsParMesure = kMaxMesure;
	else if(nbTemps < kMinMesure)
		nbTempsParMesure = kMinMesure;
	else
		nbTempsParMesure = nbTemps;
}

- (BOOL)estEnMarche
{
	return etatMarche;
}

- (void)setEtatMarche:(BOOL)boolVal
{
	etatMarche = boolVal;
	if(etatMarche == YES)
	{
		[[[Materiel sharedMateriel] horloge] activerCommande:commandFire periodiquement:60.0/tempo];
	}
	else {
		[[[Materiel sharedMateriel] horloge] desactiver:commandFire];
	}
	
}

- (void)fire
{
	[controller marquerTemps];
	if(tempsCourant >= nbTempsParMesure)
	{
		[controller marquerMesure];
	}
	tempsCourant = tempsCourant + 1;
	if(tempsCourant > nbTempsParMesure)
		tempsCourant = 1;
}

- (void)restart
{
	tempsCourant = kDefaultTempsCourant;
}

@end
